#!/bin/bash
# XDevice 构建脚本

set -e

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 默认参数
BUILD_TYPE="Release"
BUILD_TESTS="ON"
BUILD_DIR="build"
INSTALL_PREFIX="/usr/local"
CLEAN_BUILD=false
VERBOSE=false

# 帮助信息
show_help() {
    echo "XDevice 构建脚本"
    echo ""
    echo "用法: $0 [选项]"
    echo ""
    echo "选项:"
    echo "  -h, --help          显示此帮助信息"
    echo "  -d, --debug         Debug构建 (默认: Release)"
    echo "  -t, --no-tests      不构建测试程序"
    echo "  -c, --clean         清理构建目录"
    echo "  -v, --verbose       显示详细构建信息"
    echo "  -p, --prefix PATH   安装前缀 (默认: /usr/local)"
    echo "  -j, --jobs N        并行构建任务数 (默认: 自动检测)"
    echo ""
    echo "示例:"
    echo "  $0                  # Release构建"
    echo "  $0 -d               # Debug构建"
    echo "  $0 -c -d            # 清理后Debug构建"
    echo "  $0 -j 8             # 使用8个并行任务构建"
}

# 解析命令行参数
while [[ $# -gt 0 ]]; do
    case $1 in
        -h|--help)
            show_help
            exit 0
            ;;
        -d|--debug)
            BUILD_TYPE="Debug"
            shift
            ;;
        -t|--no-tests)
            BUILD_TESTS="OFF"
            shift
            ;;
        -c|--clean)
            CLEAN_BUILD=true
            shift
            ;;
        -v|--verbose)
            VERBOSE=true
            shift
            ;;
        -p|--prefix)
            INSTALL_PREFIX="$2"
            shift 2
            ;;
        -j|--jobs)
            JOBS="$2"
            shift 2
            ;;
        *)
            echo -e "${RED}错误: 未知选项 $1${NC}"
            show_help
            exit 1
            ;;
    esac
done

# 自动检测CPU核心数
if [[ -z "$JOBS" ]]; then
    JOBS=$(nproc)
fi

echo -e "${BLUE}=== XDevice 构建系统 ===${NC}"
echo -e "构建类型: ${GREEN}$BUILD_TYPE${NC}"
echo -e "构建测试: ${GREEN}$BUILD_TESTS${NC}"
echo -e "安装前缀: ${GREEN}$INSTALL_PREFIX${NC}"
echo -e "并行任务: ${GREEN}$JOBS${NC}"
echo ""

# 清理构建目录
if [[ "$CLEAN_BUILD" == true ]]; then
    echo -e "${YELLOW}清理构建目录...${NC}"
    rm -rf "$BUILD_DIR"
fi

# 创建构建目录
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"

# 配置CMake
echo -e "${BLUE}配置CMake...${NC}"
CMAKE_ARGS=(
    -DCMAKE_BUILD_TYPE="$BUILD_TYPE"
    -DCMAKE_INSTALL_PREFIX="$INSTALL_PREFIX"
    -DBUILD_TESTS="$BUILD_TESTS"
)

if [[ "$VERBOSE" == true ]]; then
    CMAKE_ARGS+=(-DCMAKE_VERBOSE_MAKEFILE=ON)
fi

cmake "${CMAKE_ARGS[@]}" ..

# 构建
echo -e "${BLUE}开始构建...${NC}"
if [[ "$VERBOSE" == true ]]; then
    make -j"$JOBS" VERBOSE=1
else
    make -j"$JOBS"
fi

echo -e "${GREEN}构建完成！${NC}"
echo ""
echo -e "${BLUE}输出文件:${NC}"
echo -e "  静态库: ${GREEN}lib/libxdevice.a${NC}"
echo -e "  动态库: ${GREEN}lib/libxdevice.so${NC}"
echo -e "  CLI工具: ${GREEN}bin/xdevice_cli${NC}"
echo -e "  节点程序: ${GREEN}bin/xdevice_node${NC}"

if [[ "$BUILD_TESTS" == "ON" ]]; then
    echo -e "  测试程序: ${GREEN}bin/test_*${NC}"
fi

echo ""
echo -e "${YELLOW}安装命令: sudo make install${NC}"
echo -e "${YELLOW}运行测试: make test 或直接运行 bin/test_*${NC}"
